//
//  LKOAuthViewController.swift
//  LKWeibo
//
//  Created by like on 16/8/10.
//  Copyright © 2016年 like. All rights reserved.
//

import UIKit
import SVProgressHUD
import AFNetworking

class LKOAuthViewController: UIViewController {

    
    override func loadView() {
        view = webView
        // 判断url 是否为nil
        guard let url = NSURL(string: "https://api.weibo.com/oauth2/authorize?client_id=\(WBAppKey)&redirect_uri=\(WBRedirect_uri)") else{
            return
        }
        webView.delegate = self

        // 实例化request
        let request = NSURLRequest(URL: url)
        // 记载request
        webView.loadRequest(request)
    }

    
    override func viewDidLoad() {
        super.viewDidLoad()
        setNVitem()
    }

    //取消按钮的监听方法
    @objc private func cancel(){
        
        dismissViewControllerAnimated(true) {
            
        }
    }
    
    //自动填充监听方法   JS 与 OC的交互
    @objc private func autofillAction(){
        let jsString = "document.getElementById('userId').value='\(WBName)',document.getElementById('passwd').value='\(WBPassWd)'"
        // js注入
        webView.stringByEvaluatingJavaScriptFromString(jsString)
        
    }
    
    private func setNVitem(){
     
        view.backgroundColor = UIColor.redColor()
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "取消", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(LKOAuthViewController.cancel))
        
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(LKOAuthViewController.autofillAction))
        navigationItem.title = "微博登录"
        
    }
    
    
    private lazy var webView:UIWebView = UIWebView()

}

    // MARK: -  webview的代理方法

extension LKOAuthViewController: UIWebViewDelegate {
    /*
     - 监听 webView 将要加载的request
     - 如果不实现 默认 返回true
     - 如果返回 false  停止加载requet
     */
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        //打印request.url.absoluteString  为4，5个 Url   下面来进行筛选
        // 判断urlString 是否为nil  而且 它的前缀是否为我们设置的回调页
        if let urlString = request.URL?.absoluteString where urlString.hasPrefix(WBRedirect_uri){
            
            if let query = request.URL?.query{
                // 获取code(截取字符串)
                let code = query.substringFromIndex("code=".endIndex)
                // print("终于等到你还好没放弃:\(code)")
                LKUserAccountViewModel.sharedTools.getUserAccount(code, finish: { (isSuccess) -> () in
                    if !isSuccess {
                        print("请求失败")
                        return
                    }
                    printLog("请求成功")
                    
                    self.dismissViewControllerAnimated(false, completion: { () -> Void in
                        // 发送通知 切换根控制器
                        NSNotificationCenter.defaultCenter().postNotificationName(WBSWITCHROOTVCNOTIFICATION, object: "oauth")
                    })
                })
                return false
            }
        }
        return true
    }
    //开始
    func webViewDidStartLoad(webView: UIWebView) {
//        SVProgressHUD.show()
    }
    
    //结束
    func webViewDidFinishLoad(webView: UIWebView) {
//        SVProgressHUD.dismiss()
    }
    
    //加载失败
    func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
        
    }
    
}

//MARK: - 通过code请求数据
extension LKOAuthViewController{
    
//    func getUserAccount(code: String){
//        
//        LKNetworkTools.sharedTools.oauthLoadUserAccount(code, success: { (response) in
//            
//            //             判断response 是否为nil 而且是否可以转成一个字典
//            // 如果你使用if-let 或者gurad 判断可选值是否可以转成我们想要的类型 一般均使用as?
//            guard let result = response as? [String:AnyObject] else{
//                return
//            }
//            
//            let userAccount = LKUserAccountModel(dict: result)
//            
//            self.getUserInfo(userAccount)
//            
//        }) { (error) in
//            
//            printLog("获取失败")
//            
//        }
//        
//    }
    
//        // 请求urlString
//        let urlString = "https://api.weibo.com/oauth2/access_token"
//        
//        // 请求参数
//        let params = [
//            "client_id":WBAppKey,
//            "client_secret": WBAppSecret,
//            "grant_type":"authorization_code",
//            "code":code,
//            "redirect_uri": WBRedirect_uri
//        ]
//        
//        
//        LKNetworkTools.sharedTools.request(LKNetworkToolsMethod.POST, URLString: urlString, parameters: params, success: { (response) in
//            
//            // 判断response 是否为nil 而且是否可以转成一个字典
//            // 如果你使用if-let 或者gurad 判断可选值是否可以转成我们想要的类型 一般均使用as?
//            guard let result = response as? [String:AnyObject] else{
//                return
//            }
//            
//            let userAccount = LKUserAccountModel(dict: result)
//            
//            self.getUserInfo(userAccount)
//            
//            }) { (error) in
//                
//                printLog("获取失败")
//                
//        }
        
        
        
        
//        let manager = AFHTTPSessionManager()
//        
//        manager.responseSerializer.acceptableContentTypes?.insert("text/plain")
//        manager.POST(urlString, parameters: params, progress: nil, success: { (_, response) in
//            
//            // 判断response 是否为nil 而且是否可以转成一个字典
//            // 如果你使用if-let 或者gurad 判断可选值是否可以转成我们想要的类型 一般均使用as?
//            guard let result = response as? [String:AnyObject] else{
//                return
//            }
//            
//            let userAccount = LKUserAccountModel(dict: result)
//            printLog("请求成功\(userAccount)")
//            
//            self.getUserInfo(userAccount)
//
//            }) { (_, error) in
//                
//            printLog("获取失败")
//                
//        }
 
//
// 
//    // 请求个人信息
//    func getUserInfo(userAccount: LKUserAccountModel){
//        
//        LKNetworkTools.sharedTools.oauthLoadUserInfo(userAccount, success: { (response) in
//            
//            //判断是否为nil 是否可以转成一个字典
//            guard let res = response as?[String:AnyObject] else{
//                return
//            }
//            
//            userAccount.screen_name = res["screen_name"] as? String
//            userAccount.avatar_large = res["avatar_large"] as? String
//            printLog("请求成功")
//            print(userAccount)
//            
//        }) { (error) in
//            
//            printLog("获取失败")
//            print(error)
//            
//        }
//        
//        
//        
//    }
//        // 请求urlString
//        let urlString = "https://api.weibo.com/2/users/show.json"
//        // 请求参数
//        let params = [
//            "access_token":userAccount.access_token!,
//            "uid":userAccount.uid!
//        ]
//        
//        LKNetworkTools.sharedTools.request(LKNetworkToolsMethod.GET, URLString: urlString, parameters: params, success: { (response) in
//            
//            // 判断是否为nil 是否可以转成一个字典
//            guard let res = response as?[String:AnyObject] else{
//                return
//            }
//            
//            userAccount.screen_name = res["screen_name"] as? String
//            userAccount.avatar_large = res["avatar_large"] as? String
//            printLog("请求成功")
//            print(userAccount)
//            
//            }) { (error) in
//                printLog("获取失败")
//                print(error)
//        }
        
        
//        // 发送请求
//        let manager = AFHTTPSessionManager()
//        
//        manager.GET(urlString, parameters: params, progress: nil, success: { (_, response) in
//             //print(response)
//            
//            // 判断是否为nil 是否可以转成一个字典
//            guard let res = response as?[String:AnyObject] else{
//                return
//            }
//            
//            userAccount.screen_name = res["screen_name"] as? String
//            userAccount.avatar_large = res["avatar_large"] as? String
//            
//            print(userAccount)
//            
//            }) { (_, error) in
//                
//        }
        
//        
//    }
    
    
}



